package com.learn.finished;

import com.learn.finished.num_02;

/**
 * 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。
 */
public class num_19 {
    static public class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }
    public static ListNode removeNthFromEnd(ListNode head, int n) {
        //从头到尾进行遍历，到达第n个的时候，记录节点，直接拼接
        //1,2,3,4,5,6,7,8---n=2  len=8，倒数第n为正数第7个--8-2+1
        //如果n=3，n=4，分别为第6位--8-3+1，第5位--8-4+1
        //所以有一个规律，为倒数第n位，即正数-n+1
        //还有一个条件判断，如果是倒数第1位，即8-1+1，所以是第8位，所以，如果n=1，所以第7位.next=null;
        //所以是len-1.next=null或者len-1.next=len-1.next.next
        int len=1;
        if (head.next == null) {
            return null;
        }

        ListNode res=new ListNode(0,head);

        ListNode copyList=head;
        while (copyList.next != null) {
            len+=1;
            copyList=copyList.next;
        }

        head=res;
        for (int i = 1; i < len - n + 1; ++i) {
            head = head.next;
        }
        head.next = head.next.next;
        ListNode ans=res.next;
        return ans;
//        len-=n;
//        while (len>0){
//            head=head.next;
//            len-=1;
//        }
//        head=head.next.next;
//        return head;


    }

    public static void main(String[] args) {
        ListNode listNode = new ListNode(2, new ListNode(4, new ListNode(3,new ListNode(6, new ListNode(7, new ListNode(9,null ))))));
        ListNode listNode1 = removeNthFromEnd(listNode, 2);
    }

}
